儲存空間的資料類型目前據我所知的有兩種。geography
和 geometry
以球面為依據的資料類型,採用圓球座標系統(你也知道的,地球是圓的,不對是一個類似橢圓形的地球),所有地表上的計算,都要把曲率列入考量,因此會導致此一類型所需的數學計算更加複雜,也會限制能夠配合使用的函式數量,但由於它已考慮到地表的曲線,因此計算距離時會更加準確,計算結果以公尺為單位,如果你需要處理跨越大型地區的資料時,就應該採用這種資料類型。
以平面為依據的資料類型,採用歐幾里得座標系統。此處不考慮球面曲率,因此在計算地理距離時較不精準,其計算結果單位可以由座標系統來決定。
建議
範圍大 -> geography
範圍小 -> geometry
geography
、geometry
PostGIS 有很多的空間構造的方法,可以從WKT字串(昨天學到的那個字串)或座標建構出來空間物件,並指定一個座標系統給它。先來了解座標系統常見的有哪些!
為了方便全世界的座標系統的轉換及辨識,所以EPSG(一個國際組織單位),定義了世界各國家投影的坐標系統並有對應的編號 SRID (前幾天的文章有稍微提到),在台灣的我們常使用的編號如下
名稱 | EPSG紀錄代碼SRID | 說明 |
---|---|---|
WGS84 | 4326 | 你所知道的經緯度座標 例如:Google Earth |
Web Mercator | 3857 | Google Map |
TWD97 中央經線121度 | 3826 | |
TWD97 中央經線119度 | 3825 | |
TWD67 中央經線121度 | 3828 | 台灣的舊系統 |
TWD67 中央經線119度 | 3827 | 台灣的舊系統 |
至於資料怎麼存比較好呢? 建議使用 WGS84(4326) 因為國際通用的經緯度座標系統,但還是依照自己的系統(前端的GIS系統)是用哪一種去決定。但如果拿到經緯度資料時要匯入資料庫,可能不是 WGS84(4326) ,這時座標就必須要做轉換,才能顯示於正確地理位置,目前現行政府的座標系統資料可能皆使用TWD97(3826、3825),較舊的的可能會使用 TWD67(3826、3825) ,若台澎金馬
適用 中央經線119度(3825、3827) 的座標系統。
接下來把座標或WKT字串,以及座標系統的SRID,一起轉成geography
或 geometry
資料類型吧!
Geometry
類型資料PostGIS 的空間建構方法 ST_GeomFromText(WKT, SRID)
; 格式就像左邊顯示一樣,填入對應的值以後就可以產生的Geometry
資料類型。
SELECT ST_GeomFromText('POINT(120.9 22.5)', 4326);
輸出結果如下,表示這個點位的空間資料,並且有指定座標系統。
0101000020E61000009A99999999395E400000000000803640
Geography
資料類型建立 Geography
資料類型的方法 ST_GeogFromText(text EWKT)
,EWKT 如下範例所示 'SRID=4326;LINESTRING(120.9 22.5, 121.0 22.6)'
SELECT ST_GeogFromText('SRID=4326;LINESTRING(120.9 22.5, 121.0 22.6)');
如下輸出結果,代表一個線段的空間資料,並且有指定座標系統。
0102000020E6100000020000009A99999999395E4000000000008036400000000000405E409A99999999993640
這些輸出結果,存在資料表裡就可以了!把資料表欄位設定為對應的類型Geometry
或 Geography
即可!
PostGIS 還有其他建立特定空間物件的函式,如果有空我再一一介紹。